pdwfandomcom_zh-20200213-history
模块:AutoLink
local p = {} local block = mw.loadData( 'Module:Autolink/Block' ) local item = mw.loadData( 'Module:Autolink/Item' ) local other = mw.loadData( 'Module:Autolink/Other' ) local exclusive = mw.loadData( 'Module:Autolink/Exclusive' ) local colors = { 'white ', 'orange ', 'magenta ', 'light blue ', 'yellow ', 'lime ', 'pink ', 'gray ', 'light gray ', 'cyan ', 'purple ', 'blue ', 'brown ', 'green ', 'red ', 'black ', 'silver ' } local colorc = { '白色', '橙色', '品红色', '淡蓝色', '黄色', '黄绿色', '粉红色', '灰色', '淡灰色', '青色', '紫色', '蓝色', '棕色', '绿色', '红色', '黑色', '淡灰色'} local function Set (list) local set = {} for _, l in ipairs(list) do setl = true end return set end local coloredItems = Set { 'firework star', 'hardened clay', 'stained clay', 'banner', 'carpet', 'concrete', 'concrete powder', 'glazed terracotta', 'terracotta', 'shield', 'shulker box', 'stained glass', 'stained glass pane', 'wool', 'bed', 'hardened glass', 'hardened stained glass', 'balloon', 'glow stick', 'hardened glass pane', 'hardened glass', 'sparkler' } -- used by templates, called via #invoke function p.link( f ) local args = f if f mw.getCurrentFrame() then args = require( 'Module:ProcessArgs' ).merge( true ) end return p.invlink( args1 , args2 , args3 ) end function p.invlink( str , mode, type ) local arg = string.lower(string.gsub(str , "-" , " ")) -- check for spawn egg if string.find(arg, ' spawn egg', -10, true) then local mob = other'EntitySprite'0, -11) if mob nil then error('missing mob entry: ' .. string.sub(arg, 0, -11)) end index = string.find(mob, '|', 0, true) if index then mob = string.sub(mob, index+1) end return p.mode('刷怪蛋|' .. mob .. '刷怪蛋', mode) end local be local lce -- check for version postfix if string.sub(arg, -3) ' pe' or string.sub(arg, -3) ' be' then be = 1 arg = string.sub(arg, 0, -4) end if string.sub(arg, -4) ' lce' then lce = 1 arg = string.sub(arg, 0, -5) end -- check for color prefix local color for i, c in ipairs( colors ) do if string.find(arg, c) 1 then local item = string.sub(arg, string.len©+1) if coloredItemsitem then color = colorci arg = item end end end local result if type and othertype then result = othertypearg end if result nil then result = blockarg or itemarg end if result nil and string.sub(arg, -1) 's' then local singular = string.sub(arg, 0, -2) result = blocksingular or itemsingular end if result nil then for _, list in pairs( other ) do result = listarg if result then break end end end if result nil then result = exclusivearg or str end if color then result = result .. '|' .. color .. result end if be then return p.mode(result, mode, '（基岩版）') end if lce then return p.mode(result, mode, '（原主机版）') end return p.mode(result, mode) end function p.mode( str , mode , postfix ) if postfix then str = str .. '|' .. str .. postfix end index = string.find(str, '|', 0, true) -- return the translated part if index then if mode 'nolink' then return string.sub(str, index+1) end -- return the page link part if mode 'linkonly' then return string.sub(str, 1 , index-1) end end return str end -- list out all entries with the type function p.list( f ) local args = f if f mw.getCurrentFrame() then args = require( 'Module:ProcessArgs' ).merge( true ) end local type = args1 type = string.lower(type) local sprite = nil local list = nil if type 'block' then list = block sprite = 'BlockSprite' end if type 'item' then list = item sprite = 'ItemSprite' end if type 'entity' then list = other'EntitySprite' sprite = 'EntitySprite' end if list nil then return '' end local result = '' local t = {} for k,_ in pairs(list) do table.insert(t, k) end table.sort(t) local limit = 50 local count = 0 local frame = mw.getCurrentFrame() local table = nil local header = mw.html.create('tr') header:tag('th'):wikitext('图标') header:tag('th'):wikitext('英文名称') header:tag('th'):wikitext('中文名称') for _,v in ipairs(t) do if count 0 then if table ~= nil then result = result .. tostring(table) end table = mw.html.create('table'):attr('align', 'left'):css('float', 'left'):css('margin', '2px'):css('border', '1px solid silver'):css('text-align', 'center'):css('background-color', '#fff'):node(header) end local row = mw.html.create('tr') row:tag('td'):wikitext(frame:preprocess( ' ' )) row:tag('td'):wikitext((v:gsub('(%l)(%w*)', function(a,b) return a:upper()..b end))) row:tag('td'):wikitext(p.mode(listv, 'nolink')) table:node(row) count = count + 1 if count limit then count = 0 end end result = result .. tostring(table) return result end return p